// https://leetcode.cn/problems/duplicate-zeros/description/
// class Solution {
// public:
//     void duplicateZeros(vector<int>& arr) {
//         // 操作数组中的元素 一般用双指针
//         // 先根据异地操作，优化成就地操作
//         // 半模拟和半指针
//         // 1. 先找到最后一个数 用双指针模拟
//         int cur = 0;
//         int dest = -1;
//         int n =arr.size();
//         while (cur < n) {
//             if (arr[cur] == 0) {
//                 dest += 2;
//             } else {
//                 dest++;
//             }
//             if (dest >= arr.size() - 1) {
//                 break;
//             }
//             cur++;
//         }
//         // 2.判断dest是否越界访问
//         if (dest >= n) {
//             arr[n - 1] = 0;
//             dest -= 2;
//             cur -= 1;
//         }
//         // 3. 双指针替换
//         while (cur >= 0) {
//             if (arr[cur] == 0) {
//                 arr[dest] = 0;
//                 dest--;
//                 arr[dest] = 0;
//                 dest--;
//                 cur--;
//             } else {
//                 arr[dest--] = arr[cur--];
//             }
//         }
//     }
// };